//package com.starleague.battletech.unit.mech;
//
//import java.beans.Transient;
//import java.util.ArrayList;
//import java.util.Collection;
//import java.util.List;
//import java.util.Map;
//
//import com.starleague.battletech.IBattletechPoints;
//import com.starleague.common.AbstractHasInfoProperties;
//
//public class AbstractMechHitLocation
//        extends AbstractHasInfoProperties
//        implements IMechHitLocationHead, IMechHitLocationCenterTorso, IMechHitLocationSideTorso, IMechHitLocationArm,
//        IMechHitLocationLeg
//{
//    private MechGae mech;
//
//    private MechHitLocationPosition position;
//
//    private List<MechCoreComponentGae> coreComponents;
//
//    MechHitLocationGae(MechGae mech,
//                       MechHitLocationPosition position,
//                       int armorHitPoints,
//                       int internalStructureHitPoints)
//    {
//        super(armorHitPoints, internalStructureHitPoints);
//        this.mech = mech;
//        this.position = position;
//        this.coreComponents = new ArrayList<>();
//    }
//
//    protected MechHitLocationGae()
//    {
//        //
//    }
//
//    @Override
//    public MechGae getMech()
//    {
//        return this.mech;
//    }
//
//    @Override
//    public MechHitLocationPosition getPosition()
//    {
//        return this.position;
//    }
//
//    // TODO: Somehow get rid of this, via @Access(FIELD) or something...
//    protected void setPosition(MechHitLocationPosition position)
//    {
//        this.position = position;
//    }
//
//    List<MechCoreComponentGae> getCoreComponents()
//    {
//        return this.coreComponents;
//    }
//
//    //
//    // Calculated values
//    //
//
//    @Transient
//    public MechCriticalSlotGae[] getCriticalSlots()
//    {
//        return this.mech.getCriticalSlotsFor(this.position);
//    }
//
//    @Transient
//    @Override
//    public Collection<? extends IMechActuator> getActuators()
//    {
//        List<MechCoreComponentGae> actuatorList = new ArrayList<>();
//        for (MechCoreComponentGae coreComponent : this.coreComponents)
//        {
//            if (coreComponent.getActuatorType() != null)
//                actuatorList.add(coreComponent);
//        }
//        return actuatorList;
//    }
//
//    // public MechCoreComponentGae getActuator(MechActuatorType actuatorType)
//    // {
//    // for (MechCoreComponentGae coreComponent : this.coreComponents)
//    // {
//    // if (coreComponent.getActuatorType() == actuatorType)
//    // return coreComponent;
//    // }
//    // return null;
//    // }
//
//    MechCoreComponentGae getCoreComponent(MechCoreComponentType coreComponentType)
//    {
//        for (MechCoreComponentGae coreComponent : this.coreComponents)
//        {
//            if (coreComponent.getCoreComponentType() == coreComponentType)
//                return coreComponent;
//        }
//        return null;
//    }
//
//    @Override
//    public Map<String, Object> infoProperties()
//    {
//        Map<String, Object> infoPropertyMap = super.infoProperties();
//        infoPropertyMap.put("position", this.position);
//        infoPropertyMap.put("coreComponents", this.coreComponents);
//        int index = 0;
//        for (MechCriticalSlotGae criticalSlot : getCriticalSlots())
//        {
//            infoPropertyMap.put("criticalSlot[" + index++ + "]", (criticalSlot != null)
//                    ? criticalSlot.toStringSingleLine()
//                    : "<Empty>");
//        }
//        return infoPropertyMap;
//    }
//
//    @Override
//    public IBattletechPoints getArmorHitPoints()
//    {
//        // TODO Auto-generated method stub
//        return null;
//    }
//
//    @Override
//    public IBattletechPoints getInternalStructureHitPoints()
//    {
//        // TODO Auto-generated method stub
//        return null;
//    }
//}
